home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 8614 / 8614.xpi / modules / utils / Prefs.jsm < prev    next >
Text File  |  2010-02-10  |  10KB  |  396 lines

  1. // DO NOT import this into the global namespace, but instead
  2. // import it into your own namespace wrapper
  3.  
  4. var EXPORTED_SYMBOLS = ["Prefs"];
  5.  
  6. Components.utils.import("resource://glydo/utils/prototype_xul_1_6_0_3_modified.jsm");
  7. Components.utils.import("resource://glydo/utils/Utils.jsm");
  8.  
  9. var Prefs = ({
  10.     init: function() {
  11.         this.prefService = Components.classes["@mozilla.org/preferences-service;1"]
  12.                                    .getService(Components.interfaces.nsIPrefService);
  13.         this.prefBranch = this.prefService.getBranch("glydo.");
  14.         this.prefBranch.QueryInterface(Components.interfaces.nsIPrefBranch2);
  15.         this.prefBranch.addObserver("",this,false);
  16.         this.browserBranch = this.prefService.getBranch("browser.");
  17.         this.browserBranch.QueryInterface(Components.interfaces.nsIPrefBranch2);
  18.         this.listenersByKey = {};
  19.     },
  20.     
  21.     write: function(key, value) {
  22.         var type = 'char';
  23.         var branch = this.prefBranch;
  24.         if (arguments[2]) {
  25.             type = arguments[2];
  26.         }
  27.         if (arguments[3]) {
  28.             branch = arguments[3];
  29.         }
  30.     
  31.         try {
  32.             switch (type.toLowerCase()) {
  33.                 case 'char':
  34.                     branch.setCharPref(key, value);
  35.                     break;
  36.                 case 'bool':
  37.                     branch.setBoolPref(key, value);
  38.                     break;
  39.                 case 'int':
  40.                     branch.setIntPref(key, value);
  41.                     break;
  42.                 default:
  43.                     throw "Unsupported preference type";
  44.             }
  45.         } 
  46.         catch (ex) {
  47.             Utils.dump("\nFailed writing preference for '" + key + "': '" + value + "': " + ex + "\n");
  48.         }
  49.         try {
  50.             this.prefService.savePrefFile(null);
  51.         }
  52.         catch (ex) {
  53.             Utils.dump("\nFailed saving preferences: " + ex + "\n");
  54.         }
  55.     },
  56.  
  57.     read: function(key, defValue) {
  58.         var type = 'char';
  59.         var branch = this.prefBranch;
  60.         if (arguments[2]) {
  61.             type = arguments[2];
  62.         }
  63.         if (arguments[3]) {
  64.             branch = arguments[3];
  65.         }
  66.     
  67.         var value;
  68.         try {
  69.             switch (type.toLowerCase()) {
  70.                 case 'char':
  71.                     value = branch.getCharPref(key);
  72.                     break;
  73.                 case 'bool':
  74.                     value = branch.getBoolPref(key);
  75.                     break;
  76.                 case 'int':
  77.                     value = branch.getIntPref(key);
  78.                     break;
  79.                 default:
  80.                     throw "Unsupported preference type";
  81.             }
  82.         }
  83.         catch (ex) {
  84.             if (ex.name != "NS_ERROR_UNEXPECTED") {
  85.                 
  86.             }
  87.             value = defValue; 
  88.         }
  89.         return value;
  90.     },
  91.     
  92.     readAny: function(key) {
  93.         var branch = this.prefBranch;
  94.         if (arguments[1]) {
  95.             branch = arguments[1];
  96.         }
  97.         var t = branch.getPrefType(key);
  98.         switch (t) {
  99.             case branch.PREF_STRING:
  100.                 return branch.getCharPref(key);
  101.             case branch.PREF_BOOL:
  102.                 return branch.getBoolPref(key);
  103.             case branch.PREF_INT:
  104.                 return branch.getIntPref(key);
  105.             default:
  106.                 return null;
  107.         }
  108.     },
  109.  
  110.     subscribe: function(key,callback) {
  111.         var listeners = this.listenersByKey[key];
  112.         if (!listeners) {
  113.             listeners = [];
  114.         }
  115.         listeners.push(callback);
  116.         this.listenersByKey[key] = listeners;
  117.     },
  118.     
  119.     unsubscribe: function(key,callback) {
  120.         var listeners = this.listenersByKey[key];
  121.         this.listenersByKey[key] = Prototype.A.without(listeners,callback);
  122.     },
  123.     
  124.     observe: function(aSubject, aTopic, aData) {
  125.         if (aTopic != "nsPref:changed") {
  126.             return;
  127.         }
  128.         var listeners = this.listenersByKey[aData] || [];
  129.         // Add global listeners
  130.         listeners = listeners.concat(this.listenersByKey[""] || []);
  131.         if (listeners && listeners.length > 0) {
  132.             var v = this.readAny(aData);
  133.             listeners.forEach(function(listener) {
  134.                 try {
  135.                     listener(aData,v);
  136.                 } catch (ex) {
  137.                     if (Components) {
  138.                         Components.utils.reportError(ex);
  139.                     } else {
  140.                         throw ex;
  141.                     }
  142.                 }
  143.             });
  144.         }
  145.     },
  146.     
  147.     get recommendations_open_mode () {
  148.         return this.read('behavior.recommendations_open_mode','new-tab','char');
  149.     },
  150.     set recommendations_open_mode (value) {
  151.         this.write('behavior.recommendations_open_mode',value,'char');
  152.     },
  153.     get server_base_url() {
  154.         var base = this.read('connection.server_url.base',null,'char');
  155.         if (!Prototype.S.endsWith(base,"/")) {
  156.             base += '/';
  157.         }
  158.         return base;
  159.     },
  160.     set server_base_url(value) {
  161.         this.write('connection.server_url.base',value,'char');
  162.     },
  163.     server_part_url: function(rel ) {
  164.  
  165.         var base = this.server_base_url;
  166.         return Utils.newURI(rel,base).spec;
  167.     },
  168.     get server_url () {    
  169.         return this.server_part_url(
  170.                 'RecommenderServlet'
  171.                 );
  172.     },
  173.     get reporting_server_url () {
  174.         return this.server_part_url(
  175.                 'PeriodicalReportServlet'
  176.                 );
  177.     },
  178.     get resources_repository_url() {
  179.         return this.read("connection.resources_repository.url",null,'char');
  180.     },
  181.     get resources_repository_sync_interval_millis() {
  182.         return this.read("connection.resources_repository.sync.interval.minutes",360,'int')*60*1000;
  183.     },
  184.     get offline_source_dir() {
  185.         return this.read('offline.source_dir',null,'char');
  186.     },
  187.     
  188.     set offline_source_dir(value) {
  189.         this.write('offline.source_dir',value,'char');
  190.     },
  191.     
  192.     get offline_log_dir() {
  193.         return this.read('offline.log_dir',null,'char');
  194.     },
  195.     
  196.     set offline_log_dir(value) {
  197.         this.write('offline.log_dir',value,'char');
  198.     },
  199.  
  200.     get offline_log_with_offline_source() {
  201.         return this.read('offline.log_with_offline_source',false,'bool');
  202.     },
  203.     
  204.     set offline_log_with_offline_source(value) {
  205.         this.write('offline.log_with_offline_source',value,'bool');
  206.     },
  207.         
  208.     get history_max_length() {
  209.         return this.read('behavior.history.max_length',2,'int');
  210.     },
  211.     
  212.     set history_max_length(value) {
  213.         this.write('behavior.history.max_length',value,'int');
  214.     },
  215.     
  216.     get history_max_valid() {
  217.         return this.read('behavior.history.max_valid',2,'int');
  218.     },
  219.     
  220.     set history_max_valid(value) {
  221.         this.write('behavior.history.max_valid',value,'int');
  222.     },
  223.     
  224.     get report_send_interval_mins() {
  225.         return this.read('reporting.send_interval_mins',15,'int');
  226.     },
  227.     
  228.     set report_send_interval_mins(value) {
  229.         this.write('reporting.send_interval_mins',value,'int');
  230.     },
  231.     
  232.     get server_trace() {
  233.         return this.read('connection.server_trace',false,'bool');
  234.     },
  235.     
  236.     set server_trace(value) {
  237.         this.write('connection.server_trace',value,'bool');
  238.     },
  239.     
  240.     get db_recs_acks_max_age_millis() {
  241.         return this.read("db.recs_acks.max_age_days",14,'int')*24*60*60*1000;
  242.     },
  243.  
  244.     set db_recs_acks_max_age_millis(value) {
  245.         this.write('db.recs_acks.max_age_days',Math.ceil(value/(24*60*60*1000)),'int');
  246.     },
  247.  
  248.     get ticker_change_interval_millis() {
  249.         return this.read("behavior.ticker.change_interval_secs",10,'int')*1000;
  250.     },
  251.  
  252.     set ticker_change_interval_millis(value) {
  253.         this.write('behavior.ticker.change_interval_secs',Math.round(value/1000),'int');
  254.     },
  255.  
  256.     on_ticker_change_interval_millis_changed: function(callback) {
  257.         this.subscribe("behavior.ticker.change_interval_secs",callback);
  258.     },
  259.     
  260.     get ticker_show() {
  261.         return this.ticker_change_interval_millis > 0;
  262.     },
  263.     
  264.     get ticker_ads_period() {
  265.         return this.read("behavior.ticker.ads.period",4,'int');
  266.     },
  267.  
  268.     
  269.     get teaser_min_interval_millis() {
  270.         return this.read("behavior.teaser.min_interval_secs",20*60,'int')*1000;
  271.     },
  272.     
  273.     set teaser_min_interval_millis(value) {
  274.         this.write('behavior.teaser.min_interval_secs',Math.round(value/1000),'int');
  275.     },
  276.  
  277.     get teaser_min_open_time_for_ack_millis() {
  278.         return this.read("behavior.teaser.min_open_time_for_ack_secs",3,'int')*1000;
  279.     },
  280.     
  281.     set teaser_min_open_time_for_ack_millis(value) {
  282.         this.write('behavior.teaser.min_open_time_for_ack_secs',Math.round(value/1000),'int');
  283.     },
  284.  
  285.     get teaser_show() {
  286.         return this.read("behavior.teaser.show",true,'bool');
  287.     },
  288.     
  289.     set teaser_show(value) {
  290.         this.write('behavior.teaser.show',value,'bool');
  291.     },
  292.  
  293.     get teaser_auto_hide_interval_millis() {
  294.         return this.read("behavior.teaser.auto_hide_interval_secs",10,'int')*1000;
  295.     },
  296.     
  297.     set teaser_auto_hide_interval_millis(value) {
  298.         this.write('behavior.teaser.auto_hide_interval_secs',Math.round(value/1000),'int');
  299.     },
  300.  
  301.     get cache_max_entries() {
  302.         return this.read("performance.cache.max_entries",100,'int');
  303.     },
  304.     
  305.     set cache_max_entries(value) {
  306.         this.write('performance.cache.max_entries',value,'int');
  307.     },
  308.  
  309.     get cache_max_age_millis() {
  310.         return this.read("performance.cache.max_age_secs",1200,'int')*1000;
  311.     },
  312.     
  313.     set cache_max_age_millis(value) {
  314.         this.write('performance.cache.max_age_secs',Math.round(value/1000),'int');
  315.     },
  316.     
  317.     get max_recs_from_server_to_process() {
  318.         return this.read("performance.server.max_recs_to_process",100,'int');
  319.     },
  320.     
  321.     set max_recs_from_server_to_process(value) {
  322.         this.write('performance.server.max_recs_to_process',value,'int');
  323.     },
  324.  
  325.     get total_task_max() {
  326.         return this.read("performance.textex.total_task_max",12000,'int');
  327.     },
  328.     
  329.     set total_task_max(value) {
  330.         this.write('performance.textex.total_task_max',value,'int');
  331.     },
  332.  
  333.     get task_phase_max() {
  334.         return this.read("performance.textex.task_phase_max",50,'int');
  335.     },
  336.     
  337.     set task_phase_max(value) {
  338.         this.write('performance.textex.task_phase_max',value,'int');
  339.     },
  340.     get task_break() {
  341.         return this.read("performance.textex.task_break",40,'int');
  342.     },
  343.     
  344.     set task_break(value) {
  345.         this.write('performance.textex.task_break',value,'int');
  346.     },
  347.     
  348.     get uninstall_survey_url() {
  349.         return this.read("behavior.uninstall.survey_url",null,'char');
  350.     },
  351.  
  352.     set last_installed_version(value) {
  353.         this.write('general.install.last_version',value,'char');
  354.     },
  355.     
  356.     get last_installed_version() {
  357.         return this.read("general.install.last_version",null,'char');
  358.     },
  359.     
  360.     set default_search_engine(value) {
  361.         this.write('search.selectedEngine',value,'char',this.browserBranch);
  362.     },
  363.     
  364.     get default_search_engine() {
  365.         return this.read("search.selectedEngine",null,'char',this.browserBranch);
  366.     },
  367.  
  368.     set publishers(values) {
  369.         this.write('behavior.publishers',Prototype.O.toJSON(Prototype.A.uniq(values,false)),'char');
  370.     },
  371.     
  372.     get publishers() {
  373.         return Prototype.S.decodeJSON(this.read("behavior.publishers",'[]','char'));
  374.     },
  375.  
  376.     addPublishers: function(values) {
  377.         this.publishers = Prototype.A.uniq(this.publishers.concat(values),false);
  378.     },
  379.     
  380.     set engines(values) {
  381.         this.write('behavior.engines',Prototype.O.toJSON(Prototype.A.uniq(values,false)),'char');
  382.     },
  383.     
  384.     get engines() {
  385.         return Prototype.S.decodeJSON(this.read("behavior.engines",'[]','char'));
  386.     },
  387.  
  388.     addEngines: function(values) {
  389.         this.engines = Prototype.A.uniq(this.engines.concat(values),false);
  390.     },
  391.     
  392.     
  393. });
  394.  
  395. Prefs.init();
  396.